package com.jiangxjsy.core.wrap;

/**
 * wukong-crm-master
 * 蒋胜宇
 * 2025/5/29 21:42
 */

public class ResultBuilder {
    /**
     * 创建自定义结果
     *
     * @param code 错误码
     * @param msg 错误信息
     * @param data 数据
     * @return Result
     * @param <T> 数据类型
     */
    public static <T> Result<T> build(int code, String msg, T data) {
        return new Result<T>().setCode(code).setMsg(msg).setData(data);
    }

    /**
     * 创建成功结果
     *
     * @return Result
     * @param <T> 数据类型
     */
    public static <T> Result<T> ok() {
        return new Result<>(ResultCode.SystemResultCode.SYSTEM_OK);
    }

    /**
     * 创建成功结果
     *
     * @param data 数据
     * @return Result
     * @param <T> 数据类型
     */
    public static <T> Result<T> ok(T data) {
        return new Result<T>(ResultCode.SystemResultCode.SYSTEM_OK).setData(data);
    }

    /**
     * 无权操作
     *
     * @return Result
     * @param <T> 数据类型
     */
    public static <T> Result<T> noAuth() {
        return new Result<>(ResultCode.SystemResultCode.SYSTEM_NO_AUTH);
    }

    /**
     * 无权操作
     *
     * @param data 数据
     * @return Result
     * @param <T> 数据类型
     */
    public static <T> Result<T> noAuth(T data) {
        return new Result<T>(ResultCode.SystemResultCode.SYSTEM_NO_AUTH).setData(data);
    }

    /**
     * 创建错误结果
     *
     * @param resultCode 错误码
     * @return Result
     * @param <T> 数据类型
     */
    public static <T> Result<T> error(ResultCode resultCode) {
        return new Result<>(resultCode);
    }

    /**
     * 创建错误结果
     *
     * @param resultCode 错误码
     * @param data 数据
     * @return Result
     * @param <T> 数据类型
     */
    public static <T> Result<T> error(ResultCode resultCode, T data) {
        return new Result<T>(resultCode).setData(data);
    }

    /**
     * 创建错误结果
     *
     * @param code 错误码
     * @param msg 错误信息
     * @return Result
     * @param <T> 数据类型
     */
    public static <T> Result<T> error(int code, String msg) {
        return new Result<>(code, msg);
    }

    /**
     * 创建错误结果
     *
     * @param code 错误码
     * @param msg 错误信息
     * @param data 数据
     * @return Result
     * @param <T> 数据类型
     */
    public static <T> Result<T> error(int code, String msg, T data) {
        return new Result<T>(code, msg).setData(data);
    }

    /**
     * 创建错误结果
     *
     * @param resultCode 错误码
     * @param msg 错误信息
     * @return Result
     * @param <T> 数据类型
     */
    public static <T> Result<T> error(ResultCode resultCode, String msg) {
        return new Result<>(resultCode, msg);
    }

    /**
     * 创建错误结果
     *
     * @param resultCode 错误码
     * @param msg 错误信息
     * @param data 数据
     * @return Result
     * @param <T> 数据类型
     */
    public static <T> Result<T> error(ResultCode resultCode, String msg, T data) {
        return new Result<T>(resultCode, msg).setData(data);
    }
}
